iT邦幫忙

DAY 7
6

Front to Back, Node.js系列 第 7

Null & undefined 型態差異 - Node.js day 7

  • 分享至 

  • xImage
  •  

空無是一種很奇妙的狀態,在 JavaScript 裡面,null, undefined 是一種奇妙的東西。今天來探討什麼是 null ,什麼是 undefined.
Null & undefined 型態差異

空無是一種很奇妙的狀態,在 JavaScript 裡面,null, undefined 是一種奇妙的東西。今天來探討什麼是 null ,什麼是 undefined.

null

變數要經過宣告,賦予 null ,才會形成 null 型態。

    var a=null;

null 在 JavaScript 中表示一個空值。

undefined

從字面上就表示目前未定義,只要一個變數在初始的時候未給予任何值的時候,就會產生 undefined

    var a;
    
    console.log(a);
    
    // print : undefined

這個時候 a 就是屬於 undefined 的狀態。

另外一種狀況就是當 Object 被刪除的時候。

    var a = {};
    
    delete a;
    
    console.log(a);
    
    //print: undefined.

Object 在之後會介紹,先記住有這個東西。而使用 delete 的時候,就可以讓這個 Object 被刪除,就會得到結果為 undefined.

兩者比較

null, undefined 在本質上差異並不大,不過實質上兩者並不同,如果硬是要比較,建議使用 === 來做為判斷標準,避免 null, undefined 這兩者被強制轉型。

    var a=null,
        b;
        
    if (a === b) {
        console.log('same');
    } else {
        console.log('different');
    }

    //print: different

從 typeof 也可以看到兩者本質上的差異,

    typeof null;
    //print: 'object'
    
    typeof undefined;
    //print: 'undefined'

null 本質上是屬於 object, 而 undefined 本質上屬於 undefined ,意味著在 undefined 的狀態下,都是屬於未定義。

如果用判斷式來決定,會發現另外一種狀態

    Boolean(null);
    // false
    
    Boolean(undefined);
    // false

可以觀察到,如果一個變數值為 null, undefined 的狀態下,都是屬於 false。

這樣說明應該幫助到大家了解,其實要判斷一個物件、屬性是否存在,只需要使用 if

    var a;
    
    if (!a) {
        console.log('a is not existed');
    }
    
    //print: a is not existed

a 為 undefined 由判斷式來決定,是屬於 False 的狀態。

後記

在 Node.js 開發中比較少會碰到 null, undeinfed 的狀況,只要判斷都是使用 === ,不用偷工減料,讓前後端判斷標準一致,就可以完整判斷目前的數值型態為何。

在這邊提出 null, undefined 是為了讓大家更為了解 JavaScript 本身的一些謬誤,變數的部分到這邊一個段落結束,明天會從 Array 開始談起。


上一篇
JavaScript 基本解說,變數型別,宣告 - Node.js day 6
下一篇
JavaScript Array - Node.js day 8
系列文
Front to Back, Node.js21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
wordsmith
iT邦高手 1 級 ‧ 2012-10-16 13:59:11

說到型別比對,有次在判斷數字,console.log出來明明就是正確的值,但是怎麼樣都過不了,後來才想才,request.querystring進來的型別是字串,沒有先轉成數字,用 ===來比對,當然怎麼樣都過不去 Orz

我要留言

立即登入留言